#!/usr/bin/env python2
# -*- coding: UTF-8 -*-

import io
import os
import shutil


## ***********文件相关操作 start***********
# 获取文件所在目录
def getCurDir():
    return getLastDir(__file__)

# 获取当前目录的上级目录
# curDir: 需要查找上级目录的目录
def getLastDir(curDir):
    return os.path.dirname(curDir)

# 判断文件是否存在
def isFileExit(dir):
    return os.path.exists(dir)

# 创建文件夹
# dir: 需要创建的文件夹
def mkdirs(dir):
    if(isFileExit(dir)):
        return
    os.makedirs(dir)

# 判断文件路径是否文件夹
# dir: 需要进行判断的文件夹/文件路径
def isDir(dir):
    return os.listdir(dir)

# 判断文件路径是否文件
# path: 需要进行判断的文件路径
def isFile(path):
    return os.path.isfile(path)

# 通过指定路径，获取所有文件集合
# dir：指定的文件夹路径
def getFilePaths(dir):
    if isFileExit(dir):
        fileList = []
        tempFileList = os.listdir(dir)
        if tempFileList:
            for fileName in tempFileList:
                tempPath = ""
                if dir.endswith("/"):
                     tempPath = dir+fileName
                else:
                    tempPath = dir+"/"+fileName
                if isFile(tempPath):
                    fileList.append(tempPath)
                else:
                    arr = getFilePaths(tempPath)
                    for path in arr:
                        fileList.append(path)
        return fileList
    else:
        print(dir+"路径不存在")
        return []

# 获取指定路径的文件名称
# path: 需要获取文件名称的路径
def getFileName(path):
    return os.path.basename(path)


# 复制文件夹内容
# inDir: 被复制的文件目录
# outDir: 复制的输出目录
def copyDir(inDir, outDir):
    if not isFileExit(inDir) or os.path.isfile(inDir):
        print("[复制文件夹] 被复制的目录是一个文件或文件不存在，无法进行复制")
        return
    if os.path.isfile(outDir):
        print("[复制文件夹] 复制的输出目录是一个文件，无法进行复制")
        return
    shutil.copytree(inDir, outDir)
    print("[复制文件夹] ["+inDir+"]已复制到["+outDir+"]")

# 复制文件
# source_file：需要进行复制的文件路径
# destination_file：复制输出的目标路径
def copyFile(source_file, destination_file):
    if not isFileExit(source_file):
        print("[复制文件] 被复制的文件不存在")
        return
    shutil.copy(source_file, destination_file)

# 删除文件
# file_path: 需要删除的文件
def deleteFile(file_path):
    if isFileExit(file_path):
        try:
            os.remove(file_path) # 这个可以删除单个文件，不能删除文件夹
        except BaseException as e:
            print(e)

# 删除文件夹以及文件
# dir：需要删除的文件目录或文件
# isRmDir: 文件被清空后，删除当前文件夹，True：删除 False：保留
def removeFileByDir(dir,isRmDir):
    if os.path.isfile(dir):
        try:
            os.remove(dir) # 这个可以删除单个文件，不能删除文件夹
        except BaseException as e:
            print(e)
    elif os.path.isdir(dir):
        file_lis = os.listdir(dir)
        for fileName in file_lis:
            path = os.path.join(dir, fileName)
            removeFileByDir(path, True)
        if isRmDir:
            os.rmdir(dir)
## ***********文件相关操作 end***********


## ***********文件io相关操作 start***********
# 从文件路径读取文件内容
# path: 需要读取内容的文件路径
def readFromFilePath(path):
    if isFile(path):
        file = io.open(path, 'r', encoding='utf-8')
        content = file.read()
        file.flush()
        file.close()
        return content
    else:
        return ""

# 保存文件
# filePath: 文件路径
# content： 需要保存的内容
def saveFile(filePath, content):
    file = io.open(filePath,"w",encoding = 'utf-8')
    file.write(content)
    file.flush()
    file.close()
## ***********文件io相关操作 end***********

if __name__ == '__main__':
    dir = getCurDir()
    print(dir)